package com.itheima.health.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.health.constant.MessageConstant;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.entity.Result;
import com.itheima.health.pojo.CheckItem;
import com.itheima.health.service.CheckItemService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/checkitem")
public class CheckItemController {

    @Reference//从zookeeper远程调用数据
    private CheckItemService checkItemService;

    /**
     * 查询所有检查项
     * @return
     */
    @GetMapping("/findAll")//查询获取数据的时候，就用get
    public Result findAll(){

            //调用业务层的方法，查询所有检查项
            List<CheckItem> list = checkItemService.findAll();

            // 封装到result
            return new Result(true, MessageConstant.QUERY_CHECKGROUP_SUCCESS,list);

    }

    /**
     * 添加检查项
     * @param checkItem
     * @return
     */
    @PostMapping("/add")
    @PreAuthorize("hasAuthority('CHECKITEM_ADD')")//指定有授权的用户才可以添加检查项
    public Result add(@RequestBody CheckItem checkItem){
    //因为发送的数据是Jason，所以要加上@RequestBody

        //调用业务层的方法，添加检查项
        checkItemService.add(checkItem);

        return new Result(true,MessageConstant.ADD_CHECKGROUP_SUCCESS);
    }

    /**
     * 分页查询条件
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findPage")
    @PreAuthorize("hasAuthority('CHECKITEM_QUERY')")
    public Result findByPage(@RequestBody QueryPageBean queryPageBean){

        //调用业务层的方法，分页查询
        PageResult<CheckItem> pageResult = checkItemService.findPage(queryPageBean);

        // 返回结果
        return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,pageResult);
    }

    /**
     * 根据id查询检查项
     * @param id
     * @return
     */
    @GetMapping("/findById")
    public Result findById(int id){
        //调用业务层的方法，根据id查询检查项
        CheckItem checkItem = checkItemService.findById(id);

        // 返回结果
        return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,checkItem);
    }
    /**
     * 修改更新检查项
     * @param checkItem
     * @return
     */
    @PostMapping("/update")
    public Result update(@RequestBody CheckItem checkItem){

        //调用业务层的方法，修改更新检查项
        checkItemService.update(checkItem);

        // 返回结果
        return new Result(true,MessageConstant.EDIT_CHECKITEM_SUCCESS);
    }
    @PostMapping("/deleteById")
    public Result deleteById(int id){

        //调用业务层的方法，修改更新检查项
        checkItemService.deleteById(id);

        // 返回结果
        return new Result(true,MessageConstant.DELETE_CHECKITEM_SUCCESS);
    }
}
